package interfaceGraphique;


import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

/**
 * Permet de renseigner le nombre de taches periodiques, aperiodiques et la valeur du processeur (Up)
 * @author nicolas rault et matthieu allon
 *
 */
public class FenNbTache extends JDialog implements ActionListener
{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JLabel nbTache;
	private JTextField valeurNbTache;
	private JButton valider;
	private JButton annuler;
	private int nbTachePeriodique;
	private int nbTacheAperiodique;
	private int Up;
	private static FenNbTache singletonFenNbTache;
	private FenError fenError;
	private FenGenTache fenGenTache;
	private GridLayout border;
	
	/**
	 * Constructeur de la fenetre
	 */
	private FenNbTache()
	{
		this.setTitle("Choix du nombre de Tache");
		this.setSize(350,120);
		this.setLocationRelativeTo(this.getParent());
		this.setModal(true);
		nbTachePeriodique = 0;
		nbTacheAperiodique = 0;
		Up = 0;
		JPanel pan = new JPanel();
		border = new GridLayout(2,2);
		pan.setLayout(border);
		this.add(pan);
		
		//Creation des differents Label et Boutons
		nbTache = new JLabel("Nb Tache Periodique : ");
		pan.add(nbTache);
		valeurNbTache = new JTextField();
		pan.add(valeurNbTache);
		
		
		valider = new JButton("Valider");
		pan.add(valider);
		valider.addActionListener(this);
		
		annuler = new JButton("Annuler");
		pan.add(annuler);
		annuler.addActionListener(this);
	}
	
	/**
	 * Permet d'autoriser une seule creation de la fenetre FenNbTache.
	 * @return la fenetre FenNbTache
	 */
	public static FenNbTache getInstance()
	{
		if (singletonFenNbTache == null) 
		{
			singletonFenNbTache = new FenNbTache();
		}
		return singletonFenNbTache;
	}
	
	/**
	 * Permet de recuperer le nombre de tache periodique
	 * @return le nombre de tache periodique
	 */
	public int recupNbTachePeriodique()
	{
		return nbTachePeriodique;
	}
	
	/**
	 * Permet de recuperer le nombre de tache aperiodique
	 * @return le nombre de tache aperiodique
	 */
	public int recupNbTacheAperiodique()
	{
		return nbTacheAperiodique;
	}
	
	/**
	 * Permet de recuperer la part du processeur allouee aux taches periodiques
	 * @return la part du processus allouee
	 */
	public int recupUp()
	{
		return Up;
	}

	/**
	 * Permet d'assigner une action aux differents evenements survenus sur la fenetre.
	 * @param e evenement recupere par la fenetre
	 */
	public void actionPerformed(ActionEvent e) 
	{
		String bouton = e.getActionCommand();
		if(bouton.equals("Valider") && nbTache.getText().equals("Nb Tache Periodique : "))
		{
			boolean tryCatch = false;
			boolean erreur = false;
			try
			{
				nbTachePeriodique = Integer.parseInt(valeurNbTache.getText());
				tryCatch = true;
			}
			catch(java.lang.NumberFormatException e1)
			{
				fenError = FenError.getInstance("Veuillez entrer un nombre");
				fenError.changeLabel("Veuillez entrer un entier");
				fenError.setVisible(true);
				fenError.setLocation(30, 100);
				erreur = true;
			}
			if(nbTachePeriodique<1 && !erreur)
			{
				tryCatch = false;
				fenError = FenError.getInstance("Veuillez entrer un nombre");
				fenError.changeLabel("Nombre de Tache > 0");
				fenError.setVisible(true);
				fenError.setLocation(30, 100);
			}
			if(tryCatch)
			{
				valeurNbTache.setText("");
				nbTache.setText("Nb Tache Aperiodique : ");
			}
		}
		else if(bouton.equals("Valider") && nbTache.getText().equals("Nb Tache Aperiodique : "))
		{
			boolean tryCatch = false;
			boolean erreur = false;
			try
			{
				nbTacheAperiodique = Integer.parseInt(valeurNbTache.getText());
				tryCatch = true;
			}
			catch(java.lang.NumberFormatException e1)
			{
				fenError = FenError.getInstance("Veuillez entrer un nombre");
				fenError.changeLabel("Veuillez entrer un entier");
				fenError.setVisible(true);
				fenError.setLocation(30, 100);
				erreur = true;
			}
			if(nbTacheAperiodique<0 && !erreur)
			{
				tryCatch = false;
				fenError = FenError.getInstance("Veuillez entrer un nombre");
				fenError.changeLabel("Nombre de Tache >= 0");
				fenError.setVisible(true);
				fenError.setLocation(30, 100);
			}
			if(tryCatch)
			{
				valeurNbTache.setText("");
				nbTache.setText("Valeur de Up : ");
				this.setTitle("Valeur du processeur");
			}
		}
		else if(bouton.equals("Valider") && nbTache.getText().equals("Valeur de Up : "))
		{
		
			boolean tryCatch = false;
			boolean erreur = false;
			try
			{
				Up = Integer.parseInt(valeurNbTache.getText());
				tryCatch = true;
			}
			catch(java.lang.NumberFormatException e1)
			{
				fenError = FenError.getInstance("Veuillez entrer un nombre");
				fenError.changeLabel("Veuillez entrer un entier");
				fenError.setVisible(true);
				fenError.setLocation(30, 100);
				erreur = true;
			}
			if(Up<1 && !erreur)
			{
				tryCatch = false;
				fenError = FenError.getInstance("Veuillez entrer un nombre");
				fenError.changeLabel("0 < Up < 100");
				fenError.setVisible(true);
				fenError.setLocation(30, 100);
			}
			if(tryCatch)
			{
				this.setVisible(false);
				valeurNbTache.setText("");
				nbTache.setText("Nb Tache Périodique : ");
				fenGenTache = FenGenTache.getInstance("Choix de création des taches : ");
				fenGenTache.setVisible(true);
				fenGenTache.setLocation(30, 100);
			}
		}
		else
		{
			this.setVisible(false);
			this.setTitle("Choix du nombre de tache");
			valeurNbTache.setText("");
			nbTache.setText("Nb Tache Periodique : ");
		}
	}

}
